/**
 * 版权所有(C)，上海海鼎信息工程股份有限公司，2007，所有权利保留。
 * 
 * 项目名：	rumba
 * 文件名：	PeriodSchedule.java
 * 模块说明：	
 * 修改历史：
 * Jun 18, 2007 - lxm - 创建。
 */
package com.hd123.rumba.runtime.backprocess;

import java.util.Calendar;
import java.util.Date;

import com.hd123.rumba.exception.BusinessException;
import com.hd123.rumba.util.DateUtil;

/**
 * 周期后台任务调度 | 实现类
 * <p>
 * 
 * 调度公式：每间隔{@link #period}毫秒触发一次。
 * 
 * @author lxm
 * 
 */
public class PeriodSchedule implements ITaskSchedule {

  private int period = 1000;

  /**
   * 属性：间隔时间。单位毫秒。默认为1000。必须>0。
   */
  public int getPeriod() {
    return period;
  }

  public void setPeriod(int period) throws BusinessException {
    assert period > 0;
    if (period <= 0)
      throw new BusinessException("属性period必须是大于0的整数。[" + period + "]");
    this.period = period;
  }

  public String getDescription() throws BusinessException {
    float sec = period / 1000;
    return "每隔" + sec + "秒执行一次。";
  }

  public Date getNextTime() throws BusinessException {
    return getNextTime(new Date());
  }

  public Date getNextTime(Date baseTime) throws BusinessException {
    if (baseTime == null)
      baseTime = new Date();
    return DateUtil.add(baseTime, Calendar.MILLISECOND, this.period);
  }

}
